package com.obelisco.vista.seguridad;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.ResourceBundle;

import com.obelisco.modelo.beans.OrientacionMenu;
import com.obelisco.modelo.beans.TipoMenu;
import com.obelisco.modelo.data.CarpetaTransaccion;
import com.obelisco.modelo.data.Grupo;
import com.obelisco.modelo.data.Transaccion;
import com.obelisco.modelo.data.Usuario;
import com.obelisco.modelo.servicios.seguridad.IServicioAdministrarUsuarios;
import com.obelisco.modelo.servicios.seguridad.IServicioDatosUsuario;
import com.obelisco.vista.componentes.ComponenteDatosListener;
import com.obelisco.vista.componentes.DobleLista;
import com.obelisco.vista.componentes.PaneSubirImagen;
import com.obelisco.vista.componentes.TipoFuncion;
import com.obelisco.vista.controles.BindingPasswordField;
import com.obelisco.vista.controles.BindingSelectField;
import com.obelisco.vista.controles.BindingTextArea;
import com.obelisco.vista.controles.BindingTextField;
import com.obelisco.vista.controles.SelectField;
import com.obelisco.vista.estilos.Styles;
import com.obelisco.vista.plantillas.VentanaBase;

import nextapp.echo2.app.Alignment;
import nextapp.echo2.app.Button;
import nextapp.echo2.app.Color;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.Component;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Font;
import nextapp.echo2.app.Insets;
import nextapp.echo2.app.ResourceImageReference;
import nextapp.echo2.app.Row;
import nextapp.echo2.app.SplitPane;
import nextapp.echo2.app.TextField;
import nextapp.echo2.app.TextArea;
import nextapp.echo2.app.PasswordField;
import nextapp.echo2.extras.app.TabPane;
import nextapp.echo2.app.Grid;
import nextapp.echo2.app.Label;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.app.layout.GridLayoutData;
import nextapp.echo2.app.layout.RowLayoutData;
import nextapp.echo2.app.layout.SplitPaneLayoutData;
import nextapp.echo2.extras.app.layout.TabPaneLayoutData;

public class PaneCambiarDatosUsuario extends ContentPane implements ComponenteDatosListener {

	private ResourceBundle resourceBundle;

	private BindingTextField txtLogin;

	private BindingTextField txtNombre;

	private BindingTextArea txtDescripcion;

	private BindingTextField txtCorreo;

	private SelectField cmbTipoMenu;
	
	private SelectField cmbOrientacionMenu;
	
	private PaneSubirImagen foto;

//private ArbolSeguridad arbolSeguridad;
//
//	private Label lblDescripcion;
//
//	private Label lblNombre;
//
//	private Label lblTipo;
//
//	private Label lblEsPreferido;
//	
//	private Button btnRevocar;
//	
//	private Button btnConceder;	

	private IServicioDatosUsuario servicioDatosUsuario;

	/**
	 * Creates a new <code>PaneUsuario</code>.
	 */
	public PaneCambiarDatosUsuario() {
		super();

		// Add design-time configured components.
		//initComponents();
	}

	public void onCancelar() {
		// TODO Auto-generated method stub

	}

	public void onConfirmarCambios(Object objeto, TipoFuncion tipo,
			String nombre) {
		// TODO Auto-generated method stub
		usuario.setTipoMenu(((TipoMenu)cmbTipoMenu.getSelectedItem()).getId().toString());
		usuario.setOrientacionMenu(((OrientacionMenu)cmbOrientacionMenu.getSelectedItem()).getId().toString());
		servicioDatosUsuario.guardarUsuario(usuario);
	}

	public void onConfirmarEliminacion(Object object) {
		// TODO Auto-generated method stub

	}

	public void onConsultar(Object objeto) {
		// TODO Auto-generated method stub
	}

	public void onCrear() {
		// TODO Auto-generated method stub

	}

	public void onFuncionPersonalizada(Object objeto, TipoFuncion funcion,
			String nombre) {
		// TODO Auto-generated method stub

	}

	public void onIncluir(Object objeto) {
		// TODO Auto-generated method stub
	}

	public void onInicializar() {
		initComponents();
		
		// TODO Auto-generated method stub
		txtLogin.setBinding(usuario, "login");
		txtNombre.setBinding(usuario, "nombrecompleto");
		txtDescripcion.setBinding(usuario, "descripcion");
		txtCorreo.setBinding(usuario, "direccioncorreo");
		cmbTipoMenu.inicializarDatos(TipoMenu.getTiposMenu(), "nombre","id");
		cmbOrientacionMenu.inicializarDatos(OrientacionMenu.getOrientacionesMenu(), "nombre","id");
		
		foto.setBinding(usuario.getFoto(), "contenido");
		
		//arbolSeguridad.addArbolSeguridadListener(eventoArbol);
		//arbolSeguridad.addEjecutarListener(eventoEjecutar);
		//arbolSeguridad.setRaiz(usuario.getFunciones());
	}

	private Usuario usuario;

	public void onModificar(Object objeto) {
		// TODO Auto-generated method stub
		txtLogin.setEnabled(false);
		txtNombre.setEnabled(true);
		txtDescripcion.setEnabled(true);
		txtCorreo.setEnabled(true);
		cmbTipoMenu.setSelectedItemPorId(usuario.getTipoMenu());
		cmbOrientacionMenu.setSelectedItemPorId(usuario.getOrientacionMenu());
		this.cambioTipoMenu();
		
		foto.setEnabled(true);		
	}

	public void onObjetoEntidad(Object objeto) {
		// TODO Auto-generated method stub
		usuario = servicioDatosUsuario.buscarUsuario(((Usuario) objeto).getLogin());
	}

	public boolean onValidarDatos(Object objeto, TipoFuncion tipo, String nombre) {
		// TODO Auto-generated method stub
		return true;
	}
	
//	private void accionConceder(ActionEvent e) {
//		//TODO Implement.
//		usuario.getFuncionespreferidas().add((Transaccion) objetoActual);
//		arbolSeguridad.setRaiz(usuario.getFunciones());
//	}
//	private void accionRevocar(ActionEvent e) {
//		//TODO Implement.
//		usuario.getFuncionespreferidas().remove((Transaccion) objetoActual);
//		arbolSeguridad.setRaiz(usuario.getFunciones());
//	}
	
//	private ArbolSeguridadListener eventoArbol = new ArbolSeguridadListener() {
//
//		public void onChangeNode(TreeNodeCustom nodo, Object objeto) {
//			// TODO Auto-generated method stub
//			if (nodo instanceof TreeNodeTransaccion) {
//				TreeNodeTransaccion nodoTran = (TreeNodeTransaccion) nodo;
//
//				Transaccion transaccion = nodoTran.getTransaccion();
//
//				if (usuario.getFuncionespreferidas().contains(transaccion)) {
//					nodo.setIcono(Styles.ICON_16_PREF);
//				} else {
//					nodo.setIcono(Styles.ICON_16_NOPREF);
//				}
//
//			}
//
//		}
//
//	};
//	
//	private Object objetoActual;
//	
//	private EjecutarListener eventoEjecutar = new EjecutarListener() {
//
//		public void onClickCarpeta(CarpetaTransaccion carpeta) {
//			// TODO Auto-generated method stub
//			lblNombre.setText(carpeta.getRuta());
//			lblDescripcion.setText(carpeta.getDescripcion());
//			lblTipo.setText("Carpeta");
//			
//			String conPermiso = "NO Aplica";
//			lblEsPreferido.setText(conPermiso);
//			
//			objetoActual = carpeta;
//			
//			btnConceder.setEnabled(false);
//			btnRevocar.setEnabled(false);			
//
//		}
//
// 		public void onClickTransaccion(Transaccion transaccion) {
//			// TODO Auto-generated method stub
//			lblNombre.setText(transaccion.getNombre());
//			lblDescripcion.setText(transaccion.getDescripcion());
//			lblTipo.setText("Transaccion");
//			
//			String esPreferida = "NO";
//			if (usuario.getFuncionespreferidas().contains(transaccion)) {
//				esPreferida = "SI";
//			}
//			lblEsPreferido.setText(esPreferida);
//			
//			objetoActual = transaccion;
//			
//			btnConceder.setEnabled(true);
//			btnRevocar.setEnabled(true);			
// 		}
//		
//	};


	private void cambioTipoMenu() {
		cmbOrientacionMenu.setEnabled(true);
		if (((TipoMenu)cmbTipoMenu.getSelectedItem()).getId().equals(TipoMenu.ARBOL)) {
			cmbOrientacionMenu.setSelectedItemPorId(OrientacionMenu.VERTICAL);
			cmbOrientacionMenu.setEnabled(false);
		}
	}
	
	private ActionListener cmbTipoMenuListener = new ActionListener() {
		public void actionPerformed(ActionEvent arg0) {
			cambioTipoMenu();
		}		
	};
	/**
	 * Configures initial state of component. WARNING: AUTO-GENERATED METHOD.
	 * Contents will be overwritten.
	 */
	Component ventanaPadre = null;
	private void initComponents() {		
		if(ventanaPadre == null) {
			ventanaPadre = this.getParent();
			while (!(ventanaPadre instanceof VentanaBase)) {
				ventanaPadre = ventanaPadre.getParent();
			}
		}
		((VentanaBase)ventanaPadre).getAreaTrabajo().removeAll();

		Column column = new Column();
		TabPaneLayoutData columnLayoutData = new TabPaneLayoutData();
		columnLayoutData.setTitle("Datos Generales");
		column.setLayoutData(columnLayoutData);	
		((VentanaBase)ventanaPadre).getAreaTrabajo().add(column);
		
		com.obelisco.vista.controles.Grid grid1 = new com.obelisco.vista.controles.Grid();
		grid1.setStyleName("Obelisco.GridPaneDialogo");
		column.add(grid1);
		
		Label label1 = new Label();
		label1.setText("Login");
		grid1.add(label1);		
		txtLogin = new BindingTextField(180);
		grid1.add(txtLogin);
		Label label2 = new Label();
		
		label2.setText("Nombre Completo");
		grid1.add(label2);		
		txtNombre = new BindingTextField(250);		
		grid1.add(txtNombre);
		
		Label label3 = new Label();
		label3.setText("Descripcion");
		GridLayoutData lblDescripcionLayoutData = new GridLayoutData();
		lblDescripcionLayoutData.setAlignment(new Alignment(Alignment.DEFAULT,
				Alignment.TOP));
		label3.setLayoutData(lblDescripcionLayoutData);	
		grid1.add(label3);
		txtDescripcion = new BindingTextArea(300, 50);		
		grid1.add(txtDescripcion);

		Label label6 = new Label();
		label6.setText("Correo Electronico");
		grid1.add(label6);
		txtCorreo = new BindingTextField(250);		
		grid1.add(txtCorreo);

		grid1.add(new Label("Tipo de Menu"));
		cmbTipoMenu = new SelectField(150);
		cmbTipoMenu.setItemDefectoActivado(false);
		cmbTipoMenu.addActionListener(this.cmbTipoMenuListener);
		grid1.add(cmbTipoMenu);
		
		grid1.add(new Label("Orientacion de Menu"));
		cmbOrientacionMenu = new SelectField(150);
		cmbOrientacionMenu.setItemDefectoActivado(false);
		grid1.add(cmbOrientacionMenu);
		
		Grid grid = new Grid();
		grid.setStyleName("Obelisco.GridPaneDialogo");
		grid.setSize(1);
		
		foto = new PaneSubirImagen(150,190);
		GridLayoutData gridLayoutData = new GridLayoutData();
		gridLayoutData.setAlignment(new Alignment(Alignment.CENTER, Alignment.CENTER));
		this.foto.setLayoutData(gridLayoutData);
		grid.add(foto);

		Column column2 = new Column();
		TabPaneLayoutData columnLayoutData2 = new TabPaneLayoutData();
		columnLayoutData2.setTitle("Foto");
		column2.setLayoutData(columnLayoutData2);	
		column2.add(grid);
		((VentanaBase)ventanaPadre).getAreaTrabajo().add(column2);
	}
	
	
	
	/*
	private void initComponents() {
		TabPane tabPane1 = new TabPane();
		tabPane1.setStyleName("Obelisco.TabPane");
		this.add(tabPane1);
		
		Column column = new Column();
		TabPaneLayoutData columnLayoutData = new TabPaneLayoutData();
		columnLayoutData.setTitle("Datos Generales");
		column.setLayoutData(columnLayoutData);	
		tabPane1.add(column);
		
		com.obelisco.vista.controles.Grid grid1 = new com.obelisco.vista.controles.Grid();
		grid1.setStyleName("Obelisco.GridPaneDialogo");
		column.add(grid1);
		
		Label label1 = new Label();
		label1.setText("Login");
		grid1.add(label1);		
		txtLogin = new BindingTextField(180);
		grid1.add(txtLogin);
		Label label2 = new Label();
		
		label2.setText("Nombre Completo");
		grid1.add(label2);		
		txtNombre = new BindingTextField(250);		
		grid1.add(txtNombre);
		
		Label label3 = new Label();
		label3.setText("Descripcion");
		GridLayoutData lblDescripcionLayoutData = new GridLayoutData();
		lblDescripcionLayoutData.setAlignment(new Alignment(Alignment.DEFAULT,
				Alignment.TOP));
		label3.setLayoutData(lblDescripcionLayoutData);	
		grid1.add(label3);
		txtDescripcion = new BindingTextArea(300, 100);		
		grid1.add(txtDescripcion);

		Label label6 = new Label();
		label6.setText("Correo Electronico");
		grid1.add(label6);
		txtCorreo = new BindingTextField(250);		
		grid1.add(txtCorreo);

		Grid grid = new Grid();
		grid.setStyleName("Obelisco.GridPaneDialogo");
		grid.setSize(1);
		
		foto = new PaneSubirImagen(150,190);
		GridLayoutData gridLayoutData = new GridLayoutData();
		gridLayoutData.setAlignment(new Alignment(Alignment.CENTER, Alignment.CENTER));
		this.foto.setLayoutData(gridLayoutData);
		grid.add(foto);

		Column column2 = new Column();
		TabPaneLayoutData columnLayoutData2 = new TabPaneLayoutData();
		columnLayoutData2.setTitle("Foto");
		column2.setLayoutData(columnLayoutData2);	
		column2.add(grid);
		tabPane1.add(column2);
		
		
//		ContentPane panePreferidos = new ContentPane();
//		TabPaneLayoutData panePreferidosLayoutData = new TabPaneLayoutData();
//		panePreferidosLayoutData.setTitle("Preferidos");
//		panePreferidos.setLayoutData(panePreferidosLayoutData);
		
		/* Informacion de Preferido */
		
//		SplitPane splitPane = new SplitPane();
//		splitPane.setOrientation(SplitPane.ORIENTATION_HORIZONTAL_LEFT_RIGHT);
//		splitPane.setSeparatorPosition(new Extent(180, Extent.PX));
//		ContentPane contentPane3 = new ContentPane();
//		splitPane.add(contentPane3);
//		SplitPane splitPane1 = new SplitPane();
//		splitPane1.setOrientation(SplitPane.ORIENTATION_VERTICAL_BOTTOM_TOP);
//		splitPane1.setSeparatorPosition(new Extent(26, Extent.PX));
//		contentPane3.add(splitPane1);
//
//		Row row1 = new Row();
//		row1.setBackground(new Color(0xc9d4e6));
//		row1.setAlignment(new Alignment(Alignment.RIGHT, Alignment.DEFAULT));
//		splitPane1.add(row1);
//		btnConceder = new Button();
////		ResourceImageReference imageReference1 = new ResourceImageReference(
////				"/com/obelisco/vista/resource/image/icon/general/Icon24Check.gif");
////		btnConceder.setIcon(imageReference1);
//		btnConceder.setIcon(Styles.ICON_16_PREF);
//		btnConceder.setStyleName("Obelisco.Boton");
//
//		RowLayoutData btnConcederLayoutData = new RowLayoutData();
//		btnConcederLayoutData.setInsets(new Insets(new Extent(4, Extent.PX),
//				new Extent(2, Extent.PX)));
//		btnConceder.setLayoutData(btnConcederLayoutData);
//		btnConceder.addActionListener(new ActionListener() {
//			public void actionPerformed(ActionEvent e) {
//				accionConceder(e);
//			}
//		});
//		row1.add(btnConceder);
//		btnRevocar = new Button();
//		//ResourceImageReference imageReference2 = new ResourceImageReference(
//		//		"/com/obelisco/vista/resource/image/icon/general/Icon24Stop.gif");
//		//btnRevocar.setIcon(imageReference2);
//		btnRevocar.setIcon(Styles.ICON_16_NOPREF);
//		btnRevocar.setStyleName("Obelisco.Boton");
//		RowLayoutData btnRevocarLayoutData = new RowLayoutData();
//		btnRevocarLayoutData.setInsets(new Insets(new Extent(4, Extent.PX),
//				new Extent(2, Extent.PX)));
//		btnRevocar.setLayoutData(btnRevocarLayoutData);
//		btnRevocar.addActionListener(new ActionListener() {
//			public void actionPerformed(ActionEvent e) {
//				accionRevocar(e);
//			}
//		});
//		row1.add(btnRevocar);
//		arbolSeguridad = new ArbolSeguridad();
//		SplitPaneLayoutData arbolSeguridadLayoutData = new SplitPaneLayoutData();
//		arbolSeguridadLayoutData.setBackground(new Color(0x9aa9c3));
//		arbolSeguridad.setLayoutData(arbolSeguridadLayoutData);
//		splitPane1.add(arbolSeguridad);
//		ContentPane contentPane2 = new ContentPane();
//		contentPane2.setBackground(new Color(0xc9d4e6));
//		splitPane.add(contentPane2);
//		
//		
//		Grid grid2 = new Grid();
//		grid2.setBackground(new Color(0xc9d4e6));
//		grid2.setStyleName("Obelisco.Grid");
//		contentPane2.add(grid2);
//		
//		Label label11 = new Label();
//		label11.setText("Nombre");
//		label11.setFont(new Font(null, Font.BOLD, new Extent(10, Extent.PT)));
//		grid2.add(label11);
//		
//		this.lblNombre = new Label();
//		grid2.add(this.lblNombre);
//		
//		Label label21 = new Label();
//		label21.setText("Descripcion");
//		label21.setFont(new Font(null, Font.BOLD, new Extent(10, Extent.PT)));
//		grid2.add(label21);
//		
//		this.lblDescripcion = new Label();
//		grid2.add(this.lblDescripcion);
//		
//		Label label31 = new Label();
//		label31.setText("Tipo");
//		label31.setFont(new Font(null, Font.BOLD, new Extent(10, Extent.PT)));
//		grid2.add(label31);
//		
//		lblTipo = new Label();
//		grid2.add(lblTipo);
//		
//		Label label41 = new Label();
//		label41.setText("Es Preferido");
//		label41.setFont(new Font(null, Font.BOLD, new Extent(10, Extent.PT)));
//		grid2.add(label41);
//		
//		lblEsPreferido = new Label();
//		grid2.add(lblEsPreferido);
//		
//		panePreferidos.add(splitPane);
		
//		tabPane1.add(panePreferidos);
/*

	}
	*/
	public IServicioDatosUsuario getServicioDatosUsuario() {
		return servicioDatosUsuario;
	}

	public void setServicioDatosUsuario(IServicioDatosUsuario servicioDatosUsuario) {
		this.servicioDatosUsuario = servicioDatosUsuario;
	}

	public void onListaParametros(List arg0) {
		// TODO Auto-generated method stub
		
	}



}
